define(['Datepicker'],function(){
	var DateInput=function (initConfig){
		var dateInput=this;
		dateInput.config={};
		initConfig=$.getDefined(initConfig,{});
		dateInput.config.valueType=$.getDefined(initConfig.valueType,'single');
		dateInput.config.defDate=$.getDefined(initConfig.defDate);
		dateInput.config.nowDate=$.getDefined(initConfig.nowDate);
		dateInput.config.minDate=$.getDefined(initConfig.minDate);
		dateInput.config.maxDate=$.getDefined(initConfig.maxDate);
		if(dateInput.config.valueType==='single'){
			dateInput.config.readonly=$.getDefined(initConfig.readonly,false);
		}else{
			dateInput.config.readonly=$.getDefined(initConfig.readonly,true);
		}


		dateInput.$input=$('<input type="text" class="form-control"/>').val('请选择日期');
		dateInput.$dom=dateInput.$input;
		dateInput.$input.attr({
			'data-type':'date-input',
			'data-tips':'请选择日期'
		});


		dateInput.defDate=function(newDateStr){
			if(newDateStr===undefined){
				return dateInput.config.defDate;
			}else{
				dateInput.config.defDate=newDateStr;
				dateInput.$input.attr('data-defdate',dateInput.config.defDate);
				return dateInput;
			}
		}
		dateInput.nowDate=function(newDateStr){
			if(newDateStr===undefined){
				return dateInput.config.nowDate;
			}else{
				dateInput.config.nowDate=newDateStr;
				dateInput.$input.attr('data-nowdate',dateInput.config.nowDate);
				return dateInput;
			}
		}
		dateInput.minDate=function(newDateStr){
			if(newDateStr===undefined){
				return dateInput.config.minDate;
			}else{
				dateInput.config.minDate=newDateStr;
				dateInput.$input.attr('data-mindate',dateInput.config.minDate);
				return dateInput;
			}
		}
		dateInput.maxDate=function(newDateStr){
			if(newDateStr===undefined){
				return dateInput.config.maxDate;
			}else{
				dateInput.config.maxDate=newDateStr;
				dateInput.$input.attr('data-maxdate',dateInput.config.maxDate);
				return dateInput;
			}
		}
		dateInput.valueType=function(typeName){
			if(typeName===undefined){
				return dateInput.config.typeName;
			}else{
				dateInput.config.typeName=typeName;
				dateInput.$input.attr('data-valuetype',typeName);
				return dateInput;
			}
		}

		dateInput.defDate(initConfig.defDate);
		dateInput.nowDate(initConfig.nowDate);
		dateInput.minDate(initConfig.minDate);
		dateInput.maxDate(initConfig.maxDate);
		dateInput.valueType(initConfig.valueType || 'single');

		dateInput.$input.prop('readonly',dateInput.config.readonly);






		function valueToYYYYMMDD(v){
			switch(typeof v){
				case 'object':
					return v.Format('YYYY-MM-DD');
					break;
				default:
					return $.newDate(v).Format('YYYY-MM-DD');
			}
		}

		dateInput.value=function(newValue){
			function setDateArr(arr){
				if(arr[0]===''){
					dateInput.$input.valueReset();
					return false;
				}
				var dataValueStr,valStr;
				dataValueStr=arr.join(',');
				switch(dateInput.config.valueType){
					case 'range':
						valStr=arr.join(' ~ ');
						break;
					default:
						valStr=arr.join(',\n');
				}
				dateInput.$input.attr('data-value',dataValueStr);
				dateInput.$input.val(valStr);
			}
			function getDataArr(){
				var dataValueStr=dateInput.$input.value();
				var dataValueArr=dataValueStr.split(',');
				if(dataValueArr.length<1){
					return '';
				}else if(dataValueArr.length<2){
					return dataValueArr[0];
				}else{
					return dataValueArr;
				}
			}
			if(newValue===undefined){
				return getDataArr();
			}else{
				if($.isArray(newValue)){
					setDateArr(newValue);
				}else{
					setDateArr([newValue]);
				}
				//dateInput.$input.change();
			}
		}

		function keyInputDateCheck(keyInputValue){
			var newDateValue=$.newDate(keyInputValue);
			if(newDateValue===undefined){
				_Tips('输入的日期必须为 年-月-日');
				dateInput.value(dateInput.value());
			}else{
				dateInput.value(newDateValue.Format('YYYY-MM-DD'));
			}
		}

		if(dateInput.config.readonly===false){
			dateInput.$input.on('blur',function(){
				if(dateInput.$input.value()){
					keyInputDateCheck(dateInput.$input.val());
				}

			})
		}


		if(initConfig){
			if(initConfig.inputStyle){
				dateInput.$input.css(initConfig.inputStyle);
			}
		}
	}
	$('body').on('click','[data-type="date-input"]',function(){
		var $this=$(this);
		var newDateStr=$.newDate().Format('YYYY-MM-DD');
		var myDatepicker=new Datepicker({
			inputDom:this,
			defDate:$this.attr('data-defdate') || newDateStr,
			nowDate:$this.attr('data-nowdate') || newDateStr,
			minDate:$this.attr('data-mindate'),
			maxDate:$this.attr('data-maxdate'),
			valueType:$this.attr('data-valuetype') || 'single',
			weekStartDay:1,
			canlendarNum:2
		});
		//console.log(myDatepicker);
	});
	window.DateInput=DateInput;
	return DateInput;
})
